Use case: I2S full duplex Tx/Rx in polling mode ¶
This use case shows how to perform a full-duplex transmit/receive using polling.
Sequence diagram ¶
Code snippet ¶
|
HAL1 |
HAL2 |
|---|---|
I2S_HandleTypeDef hi2s;
uint8_t aTxBuffer[] = "****SPI - Two Boards communication based on Polling ****";
uint8_t aRxBuffer[BUFFERSIZE];
hI2S.Instance = SPI1;
hI2S.Init.Mode = I2S_MODE_MASTER_FULLDUPLEX;
hI2S.Init.Standard = I2S_STANDARD_MSB;
hI2S.Init.WSInversion = I2S_WS_INVERSION_DISABLE;
hI2S.Init.DataFormat = I2S_DATAFORMAT_24B;
hI2S.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE;
hI2S.Init.AudioFreq = I2S_AUDIOFREQ_192K;
hI2S.Init.FirstBit = I2S_FIRSTBIT_MSB;
hI2S.Init.Data24BitAlignment = I2S_DATA_24BIT_ALIGNMENT_LEFT;
hI2S.Init.MasterKeepIOState = I2S_MASTER_KEEP_IO_STATE_DISABLE;
hI2S.Init.CPOL = I2S_CPOL_LOW;
HAL_I2S_Init(&hi2s);
HAL_I2SEx_TransmitReceive(&hi2s, aTxBuffer,
aRxBuffer, BUFFERSIZE, 5000);
|
hal_i2s_handle_t hi2s;
hal_i2s_config_t i2s_config;
uint8_t aTxBuffer[] = "****SPI - Two Boards communication based on Polling ****";
uint8_t aRxBuffer[BUFFERSIZE];
HAL_I2S_Init(hi2s, HAL_I2S1);
i2s_config.mode = HAL_I2S_MODE_MASTER_FULL_DUPLEX;
i2s_config.standard = HAL_I2S_STANDARD_MSB;
i2s_config.data_format = HAL_I2S_DATA_FORMAT_24_BIT;
i2s_config.audio_frequency = HAL_I2S_AUDIO_FREQ_192_KHZ;
i2s_config.clock_polarity = HAL_I2S_CLOCK_POLARITY_LOW;
i2s_config.first_bit = HAL_I2S_MSB_FIRST;
HAL_I2S_SetConfig(&hi2s, &i2s_config);
HAL_I2S_TransmitReceive(&hi2s, aTxBuffer,
aRxBuffer, BUFFERSIZE, 5000);
|
Key changes ¶
HAL2 configures I2S via HAL_I2S_SetConfig() before starting the transfer.
HAL2 uses the renamed API HAL_I2S_TransmitReceive() instead of HAL_I2SEx_TransmitReceive().
HAL2 uses a void * data buffer pointer and uses a size expressed in bytes.

